package cn.com.huzo.service.tech;

import cn.com.huzo.model.entities.tech.ProductBomLinesEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * EBOM明细管理服务对象接口。
 *
 * @author 吴旭
 */
public interface ProductBomLinesManager extends GenericManager<ProductBomLinesEntity, String> {

    /**
     * 根据主表标识，取得明细表数据。
     *
     * @param headerId
     * @return 明细列表数据
     * @throws Exception
     */
    List<ProductBomLinesEntity> fetchLinesByHeaderId(Long headerId) throws Exception;

    /**
     * 增加EBOM明细。
     *
     * @param itemList 要增加数据列表
     * @return 新增后的EBOM明细
     * @throws java.lang.Exception
     */
    List<ProductBomLinesEntity> insertLines(List<ProductBomLinesEntity> itemList) throws Exception;

    /**
     * 通过料号更改当前EBOM明细的材料。
     *
     * @param headerId EBOM表表述
     * @param linesId 要更改的EBOM表明细标识
     * @param materialId 更改后的料ID
     * @param updatedBy 更新者
     * @return 更改后的EBOM表明细相关数据
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLinesByMaterialId(Long headerId, String linesId, Long materialId, Long updatedBy) throws Exception;

    /**
     * 批量清空单用量。
     *
     * @param itemList 要清空的数据行
     * @return 清空后的明细
     * @throws java.lang.Exception
     */
    List<ProductBomLinesEntity> batchClearLinesProductBom(List<ProductBomLinesEntity> itemList) throws Exception;

    /**
     * 引入EBOM明细。
     *
     * @param headerId 当前EBOMID
     * @param importedBomHeaderId 要引入的EBOMID
     * @param createdBy 作成者
     * @param updatedBy 更新者
     * @return 引入后的EBOM明细
     * @throws java.lang.Exception
     */
    Map<String, Object> importLinesFromOtherBom(Long headerId, Long importedBomHeaderId,
            Long createdBy, Long updatedBy) throws Exception;

    /**
     * 从剪切板粘贴数据。
     *
     * @param headerId 当前EBOMID
     * @param copiedLinesId 要粘贴的EBOM明细ID
     * @param materialId 材料ID
     * @param uomId 单位ID
     * @param specification 规格
     * @param orderNo 要粘贴的EBOM明细行号
     * @param createdBy 作成者
     * @param updatedBy 更新者
     * @return 粘贴后的EBOM明细
     * @throws java.lang.Exception
     */
    List<ProductBomLinesEntity> insertFromClipboard(Long headerId, String copiedLinesId, Long materialId,
            Long uomId, String specification, Integer orderNo, Long createdBy, Long updatedBy) throws Exception;

    /**
     * 更新EBOM明细排列顺序。
     *
     * @param itemList 数据列表
     * @return 影响行数
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLinesOrder(List<ProductBomLinesEntity> itemList) throws Exception;

    /**
     * 批量改变选定的材料配色。
     *
     * @param itemList 要改变的数据
     * @return 影响的行数
     * @throws java.lang.Exception
     */
    List<ProductBomLinesEntity> batchChangeMaterialColour(List<Map<String, Object>> itemList) throws Exception;
}
